DMA is a set of techniques for moving data from one area of memory in a computing device to another area. DMA transactions are very efficient because, once a DMA transfer operation is configured, it does not further involve the central processing unit (CPU) of the computing device, allowing the CPU to do other work while the DMA transaction proceeds. DMA transactions have thus become common and often essential features of modern computing devices.
Because DMA transactions proceed asynchronously with respect to a device's CPU, and because more than one of these asynchronous transactions may be in process at the same time, coordinating DMA transactions is quite complicated and often confusing. Some confusion arises because different operating systems impose different requirements on software developers who write code for DMA transactions. These developers may have only incomplete knowledge of the DMA requirements and capabilities of a device. Also, the developers may have neither the time nor the inclination to master all of the details of a given device's DMA transactions. In consequence, each developer tries to use only as much of a device's DMA capabilities as is strictly necessary for his tasks. Code supporting DMA transactions is thus implemented in an ad hoc fashion which invites errors and inefficiencies and which does not provide a stable basis for future development.
The resulting situation is that DMA transactions often run at a level of efficiency lower than would otherwise be possible, and ill formed DMA transactions can slow down or even jeopardize the stability of computing systems.